在阅读一些开源框架中,经常会看到如下的代码
//第一种 |
第一种的写法比较好理解。就相当于
var c=function(){};c();
第二种写法有点想不通。
前面加了一个
!
是什么意思呢?(Boolean
吗?)首先定义了一个方法
function(){alert(1);}(); //编译器会直接报错。
!function(){alert(2);}();//运行正常
+function(){alert(2);}();//运行正常
-function(){alert(2);}();//运行正常
原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
所以看到!(function(){})();
完全不足为奇。
个人感觉使用!function(){}();
这种方式就可以少写一个()
但是给看起来不那么得体。可能会给读者带来一些困惑。所以建议使用(function(){})();
这种方式。